代码的完整性
# 代码的完整性
[TOC]
# 1.数值的整数次方
# 1.1题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
# 1.2解法
# 1.2.1数学公式法
function Power(base, exponent)
{
return Math.pow(base,exponent);
}
1
2
3
4
2
3
4
# 1.2.2 优化求幂
时间复杂度O(logn)
1.当底数为0且指数<0时
会出现对0求倒数的情况,需进行错误处理
2.判断底数是否等于0
由于base为double型,不能直接用==判断
3.优化求幂函数
当n为偶数,a^n =(a^n/2)*(a^n/2)
当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a
function Power(base, exponent) {
if (base == 0 && exponent == 0) throw new Error('0的0次方无意义!');
if (exponent == 0) return 1;
let abs = exponent > 0 ? exponent : ~exponent + 1;
let res = 1;
while (abs) {
if (abs & 1) {
res *= base;
}
base *= base;
abs = abs >> 1;
}
return exponent > 0 ? res : 1 / res;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 2.调整数组顺序使奇数位于偶数前面
# 2.1题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
# 2.2解法
# 2.2.1无脑法
// 25ms 5240k
function reOrderArray(array) {
let len = array.length;
if (len < 1) return array;
for (let i = 0; i < len; i++) {
if (!(array[i] & 1)) {
array.push(array.splice(i, 1));
i--;
len--;
}
}
return array;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.2.2指针法
一个指针指向奇数,另一个指针指向奇数指针前面的偶数,依次与奇数交换位置。
1,2,4,5->1,2,5,4->1,5,2,4
// 14ms 5220k
function reOrderArray(array)
{
if(array.length<1) return array;
for(let i=0;i<array.length;i++){
if(array[i]&1){
let j=i-1;
let temp=array[i];
while(j>=0&&!(array[j]&1)){
array[j+1]=array[j];
j--;
}
array[j+1]=temp;
}
}
return array;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17